//
// Created by Administrator on 2020/7/11.
//T6章:数组、指针与字符串(2)
//[一]智能指针
//C++11的智能指针
//1.unique_ptr:
//       不允许多个指针共享资源,可以用标准库中的move函数转移指针
//2.shared_ptr:
//       多个指针共享资源
//3.weak_ptr:
//        可复制shared_ptr,但其构造或者释放对资源不产生影响

//[二]vector对象
//为什么需要vector
//-A:封装任何类型的动态数组,自动创建和删除
//-B:数组下标越界检查
//-C:vector对象的定义:vector<元素类型> 数组对象名(数组长度);
//eg:vector<int> arr(5) 建立大小为5的int数组
//-D:vector对象的使用
//   对数组元素的引用:与普通数组具有相同形式:
//                vector对象名 [小标表达式]
//            vector数组对象名不表示数组首地址
//   获取数组长度:用size函数
//             vector对象名.size()
//eg:vector应用举例
#include <iostream>
#include <vector>
using namespace std;

//计算数组arr中元素的平均值
double average(const vector<double>&arr)
{
    double sum=0;
    for(unsigned i=0;i<arr.size();i++)
        sum+=arr[i];
    return sum/arr.size();
}

int main()
{
    unsigned n;
    cout<<"n=";
    cin>>n;

    vector <double> arr(n);//创建数组对象
    cout<<"Please input"<<n<<"real number:"<<endl;
    for(unsigned i=0;i<n;i++)
        cin>>arr[i];

    cout<<"Average="<<average(arr)<<endl;
    return 0;
}
//eg:基于范围的for循环配合auto举例
#include <iostream>
#include <vector>
int main()
{
    std::vector<int>v={1,2,3};
    for(auto i=v.begin();i!=v.end();++i)
        std::cout<<*i<<std::endl;

    for(auto e:v)
        std::cout<<e<<std::endl;
}



